/*
 * 对基础的一些类或监听进行定义
 */
package com.keqiang.chart.utils

import kotlin.properties.ReadWriteProperty
import kotlin.reflect.KProperty

/**
 * 对一个不为空的数值进行代理，指定一个默认值
 */
class DefValueDelegate<T>(private val def: () -> T) : ReadWriteProperty<Any?, T> {
    private var value: T? = null

    override fun getValue(thisRef: Any?, property: KProperty<*>): T {
        if (value == null) {
            return def.invoke()
        }
        return value!!
    }

    override fun setValue(thisRef: Any?, property: KProperty<*>, value: T) {
        this.value = value
    }
}

/**
 * 点击监听，回调参数为空说明点击了非特定数据区域，不为空则为某个数据的绘制区域
 */
typealias ClickListener<D> = (entity: D?) -> Unit
